package com.ajun.simple;

import com.ajun.common.ConnectionFactoryBuilder;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * Simple 模式 - 生产者
 *
 * @author AJun
 * @date 2021-07-14
 */
@Slf4j
public class Producer {

    public static void main(String[] args) {
        Connection connection = null;
        Channel channel = null;
        try {
            // 创建连接 Connection
            connection = ConnectionFactoryBuilder.getConnection("生产者");
            // 获取通道 Channel
            channel = connection.createChannel();
            // 通过 Channel 创建交换机、声明队列、绑定关系、设置路由键、接受消息
            String queueName = "simpleQueue";
            /*
                queue – 队列名称
                durable – 声明一个持久队列（该队列将在服务器重启后继续存在），则为 true
                exclusive – 声明一个独占队列（仅限于此连接），则为 true
                autoDelete – 声明一个自动删除队列（服务器将在不再使用时将其删除），则为 true
                arguments – 队列的其他属性（构造参数）
             */
            channel.queueDeclare(queueName, false, false, false, null);
            // 创建消息
            String message = "Hello RabbitMQ!";
            // 发送消息给队列
            channel.basicPublish("", queueName, null, message.getBytes(StandardCharsets.UTF_8));
            log.debug("消息发送成功, message => {}", message);
        } catch (IOException | TimeoutException e) {
            e.printStackTrace();
        } finally {
            ConnectionFactoryBuilder.close(channel, connection);
        }
    }
}
